GitとGitHubの基本 

非プログラマ、科学計算にRを使う人向けのチュートリアル 

§0 イントロダクション

このチュートリアルについて

このチュートリアルは、プログラマではないけれど科学計算のためにRを使う人に向けた、GitとGitHubの基本的な使い方の解説です。
GitとGitHubは、ソフトウェア開発だけでなく、データ分析や研究の分野でも非常に便利なツールです。
このチュートリアルを通じて、GitとGitHubの基本的な概念や操作方法を学び、効率的なプロジェクト管理や共同作業ができるようになることを目指します。

このチュートリアルは大きく3つに分かれています。 - 準備編
- 個人開発編
- 共同開発編   

最初の準備編ではGitやGitHubを使う準備をします。ここはGitをどんな使い方で使うにしても大切な部分です。慣れていないと難しい部分も多いですが、頑張りましょう。

次の個人開発編は通常Git, Githubではあまり出てこない、「一人で」バージョン管理をする場合の使い方を学びます。Git等はシステム系で出てくることが多く、ネット上の情報も多くは情報系の人が書いています。そういう人たちの作るプログラムは基本的に多人数で共同して作成しており、成果物自体がアプリ等の形で世に出ることが多いです。一方で非プログラマで科学研究にGitを用いる私たちの場合、解析プログラムは世界中を見渡しても多くて数人、なんなら自分しか使わないことが多々あります。これは研究テーマ自体の独自性に寄与しているので割と皆さんそうなのではないかと思います。また機密性の観点から、共有できる範囲が広くて共同研究者レベルまでということもあり、そもそも共同開発になりにくいです。Gitは共同開発だけではなくて、個人開発にも大変便利ですので、2番目の章では個人開発のためのGitの使い方を学びます。gitを少し触ったことのある人に言うなら、Pull requestやForkといった概念はここでは出てきません。ブランチは少し出てきますが、なくても良いかもしれません。

最後の共同開発編は、複数人で解析プログラムを作成する場合の使い方です。具体的にはPythonの解析用の基本コードやRの図表作成用コードは共有してもいいのかなと思っております。またここを勉強すると世界中のラボで作られたコードを使ったり改良したりといった作業ができるようになります。ただ前述の通り、生物系では必須ではないかもしれません。

バージョン管理とは

みなさんはwordファイルに 「report_20240630.docx」や「report_latest.docx」といったような名前をつけたことがあるでしょうか?
もしあるなら、みなさんはすでにバージョン管理をしたことがあると言うことです。
バージョン管理はまさに先ほどのように、テキストやスクリプトを更新するたびに新しいバージョンを作成し、変更点を追跡するプロセスです。

先ほどのファイル名を変更してバージョン管理をする と言うのも一つの手です。
ただしみなさんも体感したことがあるかもしれませんが、この方法だとどれが最新版か分からなかったり、どういう変更を加えたのか分からなくなることがあります。

GitやGitHubはこれらの問題を解決してくれるツールと考えれば良いと思います。

どうして学ぶ必要があるのか

一般に研究室において、データの管理は厳しく言われることが多いと思います。一方で解析するコードを自分で書いたりした場合にはあまり厳しく管理について言われることはないのではないでしょうか。コードを本気で (手動で) 管理したいなら毎回解析に使用したソースコードをノートに貼り付ければ良いと思いますが、そんなことをしている人は見たことがありません。

情報系等ではソースコードはGitで管理することが多いようです。Git管理すれば、「あの時のコード」がどんなコードであって、その後どんな変更を加えられたのかを全て記録することができます。これによって、「あの時のコードであればうまく解析できたのに」と涙を飲む回数を減らせるはずです。

またもう一つの大きな点として、コードシェアが求められることが多くなってきていることがあります。適当な論文で”github”と検索してみるとわかると思いますが、最近は生物系の論文でも解析コードをGithubでシェアしていることが多いです。これは再現性の担保の観点から必要とされているからでしょう。生データとコードがシェアされていれば、データ解析の部分で変なことが起こっていないかを世界中で検証可能です。実際に、生物系のジャーナルで論文投稿した際に「解析に使ったコードはGithubなどでシェアしてくださいね」という要請が来た例が身近にありました。このような必要性の観点からもGithubを勉強することは大事だと思います。

参考にしたサイトなど

https://happygitwithr.com

§1 準備

各種インストールなど

それでは必要なソフトなどをインストールしていきます。ここが一番大変なところです。

Githubアカウントの作成

https://github.com. こちらからアカウントを作成します。日本語の記事ではこちら. https://reffect.co.jp/html/create_github_account_first_time. がわかりやすいと思います。
注意点としては、アカウント名は比較的いろんなことに使うので、恥ずかしくなくて長過ぎないものにしておきましょう。
メールアドレスとユーザー名はすぐに使うので覚えておきましょう。

RとRStudioのインストール or アップデート

  1. Rをインストール. ここか、ミラーサイトからどうぞ
    https://cloud.r-project.org

もしすでにRをインストールしているなら、スキップで大丈夫ですが、良い機会なのでRが最新版か確認して、必要ならアップデートしておくと良いでしょう。

  1. RStudioのインストール ここからどうぞ
    https://www.rstudio.com/products/rstudio/download/preview/

こちらももしもうインストールしているなら、スッキプ可能です。アップデートは必要ならしてください。

Gitがすでにインストールされているかチェック

最初にすでにgitがインストールされていないかチェックします。
ターミナル (windownsの場合にはコマンドプロンプト) を開きます。

以下を実行します。 Macの場合

which git

Windowsの場合

where git

(linuxの人はそもそもこの辺りでつまらないと思うので、省略) これを入れてもし以下のような返答が返ってきているなら、すでにgitが入っています。

/usr/bim/git

ついでにバージョンをチェックしてみましょう。

git --version
## git version 2.45.2

こんな感じで返ってくればOK

Gitが入っていなかった場合

インストールしてください。 こちらからどうぞ https://git-scm.com/downloads

Gitとgithubを繋げる。

以下をmacの場合ターミナル、windownsの場合Git Bashで実行します。 GitBashは以下のように探すといいと思います。

Your name と Your addressを自分のものに変えてください。

git config --global user.name "Your name"
git config --global user.email "Your address"
git config --global --list

これで作ったGithubアカウントとあなたのPCのGitを繋げることができます。

gitクライアントについて (オプション)

(最初は飛ばしてOK) GitやGitBashは便利ですが、見た目がいかつくて難しいです。文字がたくさん出てきて真っ黒の画面を見るのが好きならそのまま使えばいいと思います。

僕を含めて、プログラマじゃない人にはもっと画像が出てきた方が良いと思います。 そのためにあるのがGitクライアントです。GitとGitクラインアントの関係は簡単にいうならRとRStudioの関係にちかいと思います。RStudioは直感的に動かしやすいですが、裏で動いているのはRです。Rを直接動かすのは難しいと思います。そんな感じで、Gitを直感的に動かせるのがGit クライアントです。

とここまで書くと使った方が良さそうですが、正直RStudioやVisual studio codeの機能で同様のことができるので、無理に使わなくて良いと思います。 興味のある方はSourceTreeやGithub Desktopを調べてみてください。

SSHキーの設定

(ここはめちゃくちゃ難しいです。頑張りましょう。)
SSHキーはGitとGithubが安全に通信するためのパスワードみたいなものと理解すれば良いと思います。公開するSSHキーを作成してPCに保存し、同様のものをGithubにも教えておくことで、認証を行います。 以下の画像がわかりやすいかもしれません。

SSHキーをもっているかを確認する。

もしかしたらどこかでSSHキーをすでに作成しているかもしれません。そこで確認をしてみます。 Macの方はターミナル、windowsの方はGitBashに移動して以下のコードを実行します。

ls -al ~/.ssh/

これで存在しないと言われた場合にはキーを持っていません。ただ、仮に持っていたとしてもいい機会なので更新するといいかもしれません。

 SSHキーを作成する。

ssh-keygen -t rsa

この後に色々と出てきますが、全部エンターで大丈夫です。最初に聞かれるのはSSHキーのファイル名、2番目と3番目はSSHキーにかけるパスワードですが、慣れないうちはパスワードをかけなくてもいいと思います。

こうすると、ホームディレクトリ 1 下に.sshというフォルダ 2 が作成され、その中にid_rsaとid_rsa.pubが生成されます。

SSH-agentが有効かどうかを確認する。

ssh-agentはさっき作ったSSHキーを使ってくれるソフトウェアと思っておけばいいです。キーを作ったものの、うまくそのキーを使ってくれないと接続ができないです。

チェックのために、Macの人はターミナルで、windowsの人はGitBashで

eval "$(ssh-agent -s)"

と打ってみてください。 これで

Agent pid 11111

みたいなのが返ってくれば大丈夫です。 ダメな人でMacの方は

sudo -s -H

と打って (必要ならパスワードを打って) 再度eval~~を試してみてください。これはいわゆる”管理者権限で実行” みたいなやつです。作業が終わったら

exit

で通常権限に戻すのをお忘れなく。

上記でもダメな場合やWindowsでダメな場合には私の手には負えないのでGitHubの該当箇所を当たるのが良いと思います。 https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent

ここまでできたらssh-agentにキーを追加します。 以下を実行してください。

ssh-add ~/.ssh/id_rsa

Macの方でmacOS Sierra 10.12.2以降の方はもう一つやることがあります。 まずは以下を実行です

open ~/.ssh/config

これで

The file /Users/YOU/.ssh/config does not exist.

と返ってきた時には以下を実行してください。

touch ~/.ssh/config

再度以下を実行すると新しいウィンドウが開くと思います。

open ~/.ssh/config

そしたら以下を書き込んでください。 Host github.com AddKeysToAgent yes IdentityFile ~/.ssh/id_rsa

お疲れ様です。

SSHキーを GitHubに登録する。

最後のステップはSSHキーをGitHubに登録するステップです。 1. まずはSSHキー (公開鍵) をコピーします。 .sshディレクトリ下にid_rsa.pubと言うファイルがあると思うので、こちらを適当なエディタで開きます。 (windowsだとメモ帳、macだとテキストエディタ?) 内容をコピーしたらGitHubのホームページに行きます。(クリップボードを更新しないように!)

  1. Githubのホームページから以下のように移動します。

    1. 自分のアイコンをクリック

    1. 設定をクリック

    1. SSHをクリック

    1. New SSH keyをクリック

    1. 適当なタイトル (大抵僕はPC名にしてます) をつけて、コピーしたキーを貼り付けてAdd

これで完了です!
ここまでくると、あなたのPCがSSHと言う安全な方法を使ってGithubとやりとりできるようになりました。

普通はこの後はコマンドライン (真っ黒の画面) でGitを使う話に入るんですが、私たちは生物系で真っ黒の画面にはアレルギーがあるのでスキップします。もちろん慣れてきたら真っ黒い画面で色々してみてください。

§2 個人開発編

GitHubでレポジトリを作ってRStudioで使ってみる。

Githubでリポジトリを作る。

それでは早速Githubでリポジトリを作ってみます。リポジトリというのは感覚としてはディレクトリやフォルダと似たように捉えれば良いと思います。 ここでいきなりわりかし重大な注意ですが、 慣れるまでは最初にGithubでリポジトリを作る というのを徹底した方がいいと思います。(特にRStudioユーザ) リポジトリはローカル (みなさんのPC上) でも作れますが、RStudioではなぜかローカルで作ったリポジトリをGithubで共有する際に色々と詰まってしまいました。 自分だけならいいんですが、結局解決できなかったので、、、 あと参考にしたwebsiteもGitHubを最初に作るのを推奨しているので、、、 1. GitHubを開く

1. レポジトリの設定

ここでは設定をします。 - 名前: 適当に でも覚えやすい名前にするといいです。これがPC上のディレクトリ名にもなるので長いと大変です。 - PrivateかPublicか: これは公開するかどうかです。研究関連で秘匿情報を含む可能性があるならPrivateが望ましいです。 - Add Readme: これはリポジトリの説明文を最初に追加しておくかどうかです。慣れないうちはなしでOK - Add gitignore: これも最初は無視でOK - Choose license: これも無視でOK みたいな感じで設定したら、リポジトリが完成です。

RStudioでリポジトリをローカル (PC上) にコピーする。

今作ったリポジトリはGithub上 (リモート) に存在しています。こちらを手元のPCに持ってきましょう。 1. Githubでリポジトリを開く

  1. リポジトリの右上の緑の部分を押す
  2. 下の画面が開くのでSSHの部分のクリップボードにコピーをおしてコピー

  3. RStudioを開く
  4. File/NewprojectからVersionControl/Gitを選択
  5. Project URL にクリップボードの中身をペースト
  6. 適当なフォルダ名をつけて保存

これでRStudioでGithubのリポジトリのコピーをひらけたことになります。

VSCodeをGitHubと連携してみる。

§3 共同開発編

Appendix1 パスとディレクトリ

パスとディレクトリ

多分間違っていますが、住所に例えてみます。住所は 日本/茨城/つくば/天王台/1-1-1  みたいに階層構造になっています。日本は茨城を含んでいて、茨城はつくばを含んでいます。 こうした時に、パスは住所全体でディレクトリは「日本」とか「つくば」とかの階層の名前を指していると考えると良いかもしれません。

例えば私のPCのデスクトップのパス (住所) をみてみると

/Users/miyazakishinichi/Desktop

だそうです3

パスはファイルにも定義できて、デスクトップ上にあるtest1.csvというファイルのパスであれば

/Users/miyazakishinichi/Desktop/test1.csv

となります。

ディレクトリはさっきの例で言うと、 Users miyazakishinichi Desktop が該当します。test.csvはファイルを内包できないのでディレクトリではないです。

絶対パスと相対パス

パスには実は2種類あって、絶対パスと相対パスがあります。 絶対パスは上記したように一番上のディレクトリ (ルートディレクトリ といい”/“で表します。) から順に書いていく方法で、普通の住所のような感じです。これのメリットは、自分が今どこにいようが書き方が変わらない点です。自分がニューヨークにいようが土佐にいようが筑波大学の住所は上記のままです。 相対パスは今自分がいる場所 (カレントディレクトリと言います) から目的のところまでの行き方を書いたパスです。

パスの書き方では - . (カレントディレクトリ) - .. (一つ上の階層のディレクトリ) を示しています。 今こんな感じのフォルダ構成になっているとしましょう。
そして今あなたがDesktopディレクトリにいる4とします。この時にtest1.csvの相対パスはどうなるかというと

./test1.csv

となります。“.”はカレントディレクトリ (=Desktop) を示すので、その下のtest1.csvだけ指定してあげれば住所としては十分なわけです。

すなわちtest1.csvのパスは2種類あって

/Users/miyazakishinichi/Desktop/test1.csv (絶対パス)
./test1.csv (Desktopにいるときの相対パス)

となります。

ここまで読んでお気づきの方もいると思いますが、上記の例だけでは、今いるディレクトリ以下のファイルしか、相対パスでは指定できない と思うかもしれません。そこで出てくるのが”..” (一つ上の階層のディレクトリ) です。

例えば今Desktopにいるとして、test3.csvの相対パスを指定したい時には以下のように書きます。

../Download/test3.csv

最初の “..” が “一つ上の階層のディレクトリ” と言う意味なので、Desktopの上の階層であるYournameを指定しています。YournameはDownloadとDesktopを含んでいるので、そのうちのDownloadを指定してあげて、その中のtest3.csvを指定する と言うのが上記の意味になります。

「いる」とは何か

大体のコンピュータ作業において、「今自分がどこにいるか」と言うのは大事です。普段はあまり意識しないかもしれませんが、gitを使ったりR, pythonを使っていくなら知っておいたほうがいいと思います。

今どこにいるか はいくつかの方法で知ることができます。
ターミナルやGitBashでは以下のコマンドです。

pwd

RStudioを使っているならコンソールで以下を打ってみましょう。

getwd()

PythonではIDEのコンソールで以下を打ってみましょう。

import os 
os.getcwd()

これで「今どこにいるか」がわかるようになりました。 この「今どこにいるか」をカレントディレクトリ と言います。

ホームディレクトリとルートディレクトリ

もう一つの概念としてホームディレクトリがあります、これはエディタなどを開いた際に最初に「いる」ディレクトリのことです。例えばターミナル (GitBash) を新しく開くと以下のような画面が出ると思います。

この状態で今いる場所を尋ねると

このようにUsers/miyazakishinichiにいますよ と答えてくれます。この最初に開いた場所をホームディレクトリ と言います。またパスの書き方ではホームディレクトリを”~“で表します。 ですので例えばホームディレクトリの下にDesktopがあるなら

~/Desktop

でデスクトップのパスを表すことができます。

もう一つの概念としてルートディレクトリがあります。これはパソコン内で最も上位に位置する階層のことです。パスの書き方では”/“で表します。 これが便利なのはディレクトリ移動の時です。ディレクトリ移動はターミナルやGItBashで

cd (行きたいパス) 

と書きます。 それでは練習として、 1. ターミナルを開き 2. デスクトップに移動する

cd /Users/Yourname/Desktop
  1. デスクトップからDownloadフォルダ内のどこかのフォルダに移動してみる。
cd ../Download/testDir
  1. ルートディレクトリに戻る。
cd /
  1. もう一度デスクトップに移動
cd /Users/Yourname/Desktop
  1. ホームディレクトリに戻る。
cd ~

できましたでしょうか?ホームディレクトリがルートディレクトリの人は多分同じ場所に戻ると思います。

Appendix2 そもそもGitとGithubとは?

(最初に読むには難しいので飛ばして良いです)
Gitは、ソフトウェア開発におけるバージョン管理システムの一つで、プロジェクトのソースコードの変更履歴を管理するために使用されます。 GitHubは、Gitのリポジトリをホスティングするウェブベースのサービスです。プロジェクトのコラボレーションとコード共有に特化しており、開発者がプロジェクトを公開または非公開で管理できるプラットフォームを提供します。GitHubは、プルリクエストやイシュートラッキングなどの機能を通じて、チーム内のコミュニケーションとコードレビューのプロセスを簡素化します。

GitとGitHubの組み合わせは、ソフトウェア開発プロジェクトの効率的な管理と協力を可能にします。Gitがバージョン管理と分散作業のサポートを提供する一方で、GitHubはこれらのプロセスをよりアクセスしやすく、より協力的なものにします。

GitやGitHubを使用することで、このプロセスが大幅に簡単になります。これらのツールを使うことで、以下のような利点があります:

  1. 変更履歴の全記録:過去のあらゆるバージョンから特定の変更点を簡単に確認できます。
  2. チームでの協力:複数人で同じプロジェクトに取り組む際に、互いの作業を上書きすることなく、効率的に作業を進めることができます。
  3. ブランチ機能:新機能の開発やバグ修正をメインのプロジェクトから分離して作業することができ、安定したバージョンを保ちながら開発を進めることが可能です。
  4. マージ機能:異なるブランチの変更を統合することができ、スムーズにプロジェクトを一つにまとめることができます。
  5. レビュープロセス:GitHubのプルリクエスト機能を使用することで、コードの変更を他の人がレビューし、フィードバックを提供する前にマージすることができます。

これらの機能により、個人でもチームでも、より効率的に、より安全にプロジェクトを進めることができます。GitとGitHubは、現代のソフトウェア開発において不可欠なツールとなっています。


  1. ホームディレクトリって??ってなった人は Appendix1 パスとディレクトリ を参照してみましょう。↩︎

  2. 隠しフォルダになっているので、デフォルトの設定では見れないかもしれません。これを機にかくしフォルダを表示するように設定を変更することをお勧めします。↩︎

  3. windowsの人は違う感じになると思います。Windowsの人はパスをコピーした際の区切り文字が¥か。僕は/で統一したいのでPathcopycopyと言うソフトを入れて/で区切るパスもコピーできるようにしています。↩︎

  4. 「いる」って何だよと思った方は鋭いですが、後で説明するので待っててください。↩︎